import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';
import CryptoUtils from './cryptoUtils';

// 配置Axios实例
const createAxiosInstance = (configOverrides ?: AxiosRequestConfig) : AxiosInstance => {
	const defaultConfig : AxiosRequestConfig = {
		baseURL: '/base-web', // 默认API基础URL
		timeout: 5000, // 默认请求超时时间
		headers: {
			'Content-Type': 'application/json',
			// 可以根据需要添加其他默认头信息
		},
	};

	// 合并用户提供的配置与默认配置
	const instance = axios.create({ ...defaultConfig, ...configOverrides });

	// 可以在这里添加请求拦截器、响应拦截器等...
	instance.interceptors.request.use(config => {
		const data = config.data;
		if (null != data && data != undefined) {
			const sm4Ciphertext = CryptoUtils.sm4Encrypt(JSON.stringify(data), CryptoUtils.getKey());
			config.data = sm4Ciphertext;
		}
		// 在请求发出前进行处理，例如添加认证信息
		return config;
	}, error => {
		console.log(error);
		// 处理请求错误
		return Promise.reject(error);
	});

	instance.interceptors.response.use(res => {
		var deStr = CryptoUtils.sm4Decrypt(res.data.data, CryptoUtils.getKey());
		res.data = JSON.parse(deStr);
		var result = {
			data: res.data,
			status: res.status,
			statusText: res.statusText, // 添加缺失的statusText
			headers: res.headers,       // 添加缺失的headers
			config: res.config,         // 添加缺失的config
		}
		// 对响应数据进行处理
		return result;
	}, error => {
		console.log(error);
		// 处理响应错误
		return Promise.reject(error);
	});

	return instance;
};

// 使用创建的Axios实例
const axiosIns = createAxiosInstance();
export default axiosIns;